\subsection{Architecture générale}
\label{sec:general_architecture}

\begin{figure}[H]
\centering
\colorbox{imgBackground}{\includegraphics[width=\linewidth]{images/global_archi.png}}
\caption{Architecture globale}\label{fig:global_archi}
\end{figure}

L'architecture générale de la plateforme de migration est présentée par le
schema \ref{fig:global_archi}. On peut y observer le principe de fonctionnement 
et les fonctionnalités attendues. Ce schéma peut être résumé par les points suivants:
\begin{itemize}
  \item La plateforme doit pouvoir gérer plusieurs projets différents.
  \item Chaque projet possède une base de données de suivi manipulable via une couche
  \GLS{dao} (voir section \ref{sec:carto}).
  \item La plateforme étend l'environnement \gls{eclipse} pour proposer les
  fonctionnalités suivantes:\begin{itemize}
    \item Calcul d'avancement d'intégration.
    \item Vues de suivi  d'intégration.
    \item Génération de rapports (avancement, qualimétrie).
    \item Vues de navigation dans les données de cartographie de l'application.
  \end{itemize}
\end{itemize}

\subsection{La gestion des configurations}
\label{sec:mig_profiles}

\subsubsection{Les profils de suivi}
\label{sec:need_of_profiles}

L'introduction de la notion de profil de suivi a pour but de répondre aux
problématiques listées ci-dessous.
\begin{itemize}
  \item L'outil développé doit permettre le suivi de plusieurs projets.
  \item Les projets peuvent avoir des configurations différentes:
  \begin{itemize}
    \item Emplacement des sources.
    \item Valeurs des tags de suivi.
    \item Technologies utilisées.
    \item Support utilisé pour la de base de données de cartographie.
  \end{itemize}
  \item Le calcul de l'avancement de l'intégration se fait par l'analyse d'un
  répertoire de travail: \begin{itemize}
    \item Partage de l'espace de travail par plusieurs projets.
    \item Certains répertoires ne participent pas au calcul de l'avancement,
    exemple des répertoires de sauvegarde des métadonnées des systèmes de
    contrôle de version (ex: .svn).
    \item Seule une partie des fichiers contenus dans notre espace de travail
    représente les éléments de code à suivre.\\
  \end{itemize}
\end{itemize}
On défini ainsi un profil par projet, ce dernier regroupant toutes les
informations nécessaires au suivi de l'avancement de l'intégration. A savoir:
\begin{itemize}
  \item \emphbf{Un nom:} Utilisé pour l'identification et la présentation du
  projet.
  \item \emphbf{Un répertoire d'intégration:} Le répertoire à parcourir pour le
  calcul de l'avancement de l'intégration.
  \item \emphbf{Un répertoire de génération de rapport:} Le répertoire qui
  contiendra les différents rapports de suivi générés.
  \item \emphbf{La valeur des tags:} Des chaines de caractères permettant
  l'identification des différents tags de suivi dans les fichiers sources.  
  \item \emphbf{Les données d'accès à la base de données:} Configuration d'accès
  à la base de données de cartographie, à savoir : \begin{itemize}
    \item L'adresse du serveur.
    \item Un dialecte identifiant le formalisme SQL utilisée.
    \item Un identifiant et un mot de passe pour les autorisations d'accès.
  \end{itemize}
  \item \emphbf{Un filtre de répertoire:} La liste des répertoires à ignorer
  lors du calcul de l'avancement.
  \item \emphbf{Un filtre de fichier:} Sous la forme d'une liste d'extensions de
  fichiers à considérer lors du calcul de l'avancement.
\end{itemize}

\clearpage

\subsubsection{Configuration et gestion des profils}
\label{sec:profile_management}

La construction de la plateforme étant centrée autour de la notion de profil de
suivi, il a été décidé de stocker les informations de configuration de profil
dans un fichier au format \emph{Java Properties} (succession de lignes
clé/valeur). 

La plateforme \textsc{Eclipse} permet la création d'éditeur de fichier, et
d'associer cet éditeur à des fichiers portant une extension particulière.
L'extension choisit pour les fichiers de configuration de profils est
\emphbf{mpconfig}. Le figure \ref{fig:mpp_profile_editor} montre l'éditeur créé
pour la configuration de profil.

\begin{figure}[H]
\includegraphics[width=\textwidth]{images/mpp_profile_editor.png}
\caption{Editeur de profil}\label{fig:mpp_profile_editor}
\end{figure}

Les profils créés sont sauvegardés dans un répertoire configurable via les
préférences du plugin (voir figure \ref{fig:mpp_prefs}). Cette page de
préférences permet aussi de configurer les valeurs par défaut des tags de suivi
qui serviront lors de l'initialisation de tout nouveau profil; on peut également
y choisir la langue de l'interface utilisateur de la plateforme.

\begin{figure}[H]
\includegraphics[width=\textwidth]{images/mpp_prefs.png}
\caption{Préférences de la plateforme}\label{fig:mpp_prefs}
\end{figure}

\subsection{Les vues de pr\'esentation}
\label{sec:mig_views}

On a donc définit un éditeur capable de créer ou de modifier des configurations
de profils de suivi. La configuration ainsi créée doit être exploitée pour
proposer des vues de suivi.


\subsubsection{Perspective propre à la plateforme}
\label{sec:mpp_perspective}

Il a été mis en place une \emphbf{perspective} qui lorsque activée, organise
l'environnement de travail de manière à faciliter le suivi. La perspective
regroupe ainsi toutes les vues et éléments nécessaires à la plateforme. On peut
distinguer:
\begin{itemize}
  \item La liste des profils créés. Dans laquelle la sélection d'un profil
  entraîne l'ouverture de l'éditeur associé.
  \item Un élément graphique dans la barre de statut affichant le profil actif
  et la date du calcul de la dernière image de suivi.
  \item Une console permettant d'afficher les messages de log de la plateforme.
  \item Une vue présentant les problèmes rencontrés lors du traitement de
  fichiers pendant la phase de calcul d'avancement.
\end{itemize}

\subsubsection{Vue de synthèse de l'avancement}
\label{sec:mig_overview_page}

La vue de synthèse (\ref{fig:mpp_overview}) permet de se faire une idée rapide
sur l'état d'avancement de l'intégration en fournissant une vision globale.
Cette vue permet aussi de lancer l'algorithme de calcul d'avancement.
 
\begin{figure}[H]
\includegraphics[width=\textwidth]{images/mpp_overview.png}
\caption{Vue de synthèse d'avancement}\label{fig:mpp_overview}
\end{figure}

\subsubsection{Vue de suivi détaillé}
\label{sec:mig_progress_monitor}

Contrairement à la vue de synthèse, la vue de suivi d'intégration
(figure \ref{fig:mpp_progress_monitor}) propose des informations détaillées sur
l'avancement de l'intégration des différents types d'éléments (classes, écrans,
méthodes, \ldots).

Les informations sont présentées sous une forme arborescente selon une
hiérarchie d'éléments. Un noeud de l'arborescence représente un élément de code
et regroupe les informations de suivi de ce dernier:
\begin{itemize}
  \item Un statut pour la représentation de l'état d'avancement.
  \item Un nombre de SLOC total de l'élément.
  \item Le nombre de SLOC intégré de l'élément.
  \item Une barre d'avancement de l'intégration de l'élément dépendant de l'état
  d'avancement de ses fils. Cette barre se compose de couleurs
  représentant le nombre de SLOC de l'élément considéré se
  trouvant dans un certain état.\begin{itemize}
    \item \colorbox{waitingColor}{\ \ \ \ }  Le pourcentage de SLOC en attente.
    \item \colorbox{completedColor}{\ \ \ \ }  Le pourcentage de SLOC terminé.
    \item \colorbox{inProgressColor}{\ \ \ \ }  Le pourcentage de SLOC en cours
    d'intégration.
    \item \colorbox{errorStateColor}{\ \ \ \ }  Le pourcentage de SLOC
    d'éléments en erreurs de suivi.\\
  \end{itemize}
\end{itemize}

\begin{figure}[H]
\includegraphics[width=0.95\textwidth]{images/mpp_progress_monitoring.png}
\caption{Vue de suivi d'intégration}\label{fig:mpp_progress_monitor}
\end{figure}

\subsubsection{Vue de suivi des scénarios de test}
\label{sec:mig_scenar_page}

Le suivi de l'avancement d'un scénario de test est réalisé par le suivi de
toutes les actions effectuées pour la réalisation de ce scénario. La vue (voir
\ref{fig:mpp_scenar_page}) se présente de la même manière que la vue de suivi
d'intégration (voir \ref{sec:mig_progress_monitor}) c'est-à-dire,
une arborescence d'éléments avec des informations agrégées au niveau de chaque
noeud.

\begin{figure}[H]
\includegraphics[width=\textwidth]{images/mpp_scenario_page.png}
\caption{Vue des scénarios de test}\label{fig:mpp_scenar_page}
\end{figure}

\subsection{Le modèle de donn\'ees}
\label{sec:mig_data_model}

Dans la première version des prototypes de vues, chaque vue était responsable du
calcul des données qu'elle présentait. Au cours de l'utilisation de ces différents
prototypes, les constatations suivantes ont été effectuées:\\%
\begin{itemize}
  \item Du fait de l'accès aux données par une couche DAO, le calcul des
  données était long et couteux en mémoire. Ainsi, le temps d'affichage lors de
  l'ouverture d'une vue ou lors de la navigation entre page, était d'autant plus
  long.
  \item On retrouvait une redondance de données entre les différentes pages de
  présentation d'un même profil de suivi.
  \item Les images de suivi sont statiques, en effet une fois calculée leurs
  données ne sont plus modifiées.\\%
\end{itemize}

Les solutions suivantes ont été mises en place pour pallier aux problèmes:\\%
\begin{itemize}
  \item L'adoption d'un modèle de données unique partagé par toutes les vues
  qui sont libres de l'interpréter à leur manière. Ce modèle partagé adopte
  naturellement une structuration arborescente et sa construction réalisée de
  manière récursive est bien adaptée au contexte, car elle permet de construire
  la hiérarchie d'éléments en descendant, et les données de chaque noeud sont
  agrégées lors de la remontée.
  \item Plusieurs ajouts permettent de limiter le problème de temps de
  chargement long:\begin{itemize}
    \item Le premier est celui cité précédemment à savoir l'adoption d'un modèle
    de données unique.
    \item La sauvegarde de chaque image de suivi sur un emplacement local, nous
    évite d'avoir à le recalculer à chaque fois que l'image est sollicitée.
    Cette approche reste cohérente vu que pour un profil donné une nouvelle
    image de suivi est calculée au besoin, mais le contenu d'une image reste
    fixe.
  \end{itemize}
\end{itemize}

\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{images/ItemModel.png}
\caption{Extrait modèle données partagé par les
vues}\label{fig:shared_data_model}
\end{figure}

\clearpage
